/**
 * 可迭代数组，使用方法：
 * 1. 创建新对象，可选预先分配空间
 *      object_array_new(euint32 object_number)
 * 2. 设置操纵对象的析构方法（重要）
 *      object_array_set_object_finalize(ObjectArray*, finalize)
 * 3. 设置操纵对象的自定义排序方法
 *      object_array_set_sort_function(ObjectArray*, ObjectSortFunc)
 * 4. 设置正序或者逆序排序
 *      object_array_set_is_positive_sequence(ObjectArray*, bool)
 */
#include "ServerHeader.h"

/* 对象数组 */
typedef struct _ObjectArray ObjectArray;
#define OBJECT_ARRAY(any) ((ObjectArray *)any)

/* 排序方法，前者大于后者返回 true，否则返回 false */
typedef bool (*ObjectSortFunc)(epointer, epointer);

/**
 * @brief 创建 ObjectArray 对象，可以预先分配大小。
 * @param object_number 预先分配的对象大小，0 则不预先分配空间。
 */
extern ObjectArray *object_array_new(euint32 object_number);

/* 设置数组对象的排序方法 */
extern void object_array_set_sort_function(ObjectArray	 *self,
					   ObjectSortFunc func);

/* 数组对象排序时是否是正序(由小到大)？ */
extern void object_array_set_is_positive_sequence(ObjectArray *self,
						  bool is_positive_sequence);

/* 设置对象的析构方法 */
extern void object_array_set_object_finalize(ObjectArray *self,
					     void (*finalize)(epointer));

/* 获取第某个对象。元素若超出则返回 NULL */
extern epointer object_array_get_with_index(ObjectArray *self, euint32 index);

/* 插入一条对象 */
extern void object_array_insert_object(ObjectArray *self, epointer any_object);

/* 移除一个对象 */
extern void object_array_remove_object(ObjectArray *self, epointer any_object);

/* 进行自定义排序 */
extern void object_array_sort(ObjectArray *self);

/* 重置迭代器 */
extern void object_array_iteration_reset(ObjectArray *self);

/* 迭代一个对象 */
extern epointer object_array_iteration_get(ObjectArray *self);
